package com.yatb.trac.controller;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.beanlib.BeanSetter;

import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.multiaction.MethodNameResolver;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.yatb.trac.pojo.Progetti;
import com.yatb.trac.pojo.Societa;
import com.yatb.trac.pojo.Utenti;
import com.yatb.trac.pojo.condition.FindSocietaById;
import com.yatb.trac.pojo.condition.FinderProgettiByIds;
import com.yatb.trac.service.SearchService;
import com.yatb.trac.util.Browser;
import com.yatb.trac.util.SQLCondition;
import com.yatb.trac.util.TracBeanUtils;

public class ListaProgettiAction implements XWizardController{

	private Browser browser;
	private SearchService searchService;

	public ModelAndView associaProgetti(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map<String, Object> model = new HashMap<String, Object>();
		
		Utenti utente =  (Utenti) request.getSession(false).getAttribute("utente");
		if(utente==null){
			utente=(Utenti) request.getAttribute("utente");
		}
		model.put("utente", utente);
		String[] idsProgetti = request.getParameterValues("idProgetto");
		if (idsProgetti != null) {
			request.setAttribute("idProgetto", idsProgetti);
		}
		SQLCondition sqlCondition = new FinderProgettiByIds(idsProgetti);
		Progetti[] progettis = searchService.find(new Progetti[0],
				sqlCondition, Progetti.class);
		String idCliente = request.getParameter("idCliente");
		SQLCondition findSocietaById=new FindSocietaById(idCliente);

		List<Progetti> listaProgetti = (List<Progetti>) request.getSession(false).getAttribute("progettiSelezionati");
		if(listaProgetti==null){
			listaProgetti =  new ArrayList<Progetti>();
		}
		for (int i = 0; i < progettis.length; i++) {
			Progetti p = progettis[i];
			if(!listaProgetti.contains(p)){
				listaProgetti.add(p);
			}
		}
		request.getSession(false).setAttribute("progettiSelezionati", listaProgetti);
		return new ModelAndView("createUser", model);
	}

	public Browser getBrowser() {
		return browser;
	}

	public void setBrowser(Browser browser) {
		this.browser = browser;
	}

	public SearchService getSearchService() {
		return searchService;
	}

	public void setSearchService(SearchService searchService) {
		this.searchService = searchService;
	}

	public Object execute(HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors) {
		boolean newSearch =request.getParameter("p")==null; 
		
		Page page = getBrowser().impaginaRicerca(request, null, Progetti.class);
		Progetti[] progettis = (Progetti[]) request.getSession(false).getAttribute("risultatoRicerca");
		
		if(newSearch){
			progettis=getSearchService().find(new Progetti[0], Progetti.class);
			request.getSession(false).setAttribute("risultatoRicerca", progettis);
		}
		int dim = searchService.getMaxResults();
		int recordRimasti = progettis.length-page.getFirstRecord();
		if(recordRimasti<dim){
			dim=recordRimasti;
		}
		Progetti[] visualizzati = new Progetti[dim];
		
		System.arraycopy(progettis, page.getFirstRecord(), visualizzati, 0, dim);
		request.getSession(false).setAttribute("listaProgetti", visualizzati);
		ModelAndView mav = new ModelAndView("listaProgetti");
		return mav;

	}

}
